package model;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import dtos.ClienteDTO;
import model.beneficioVenta.BeneficioVenta;

@Entity
@Table(name = "Clientes")
public class Cliente {

	@Id
	private String dni;
	
	private String cuil;
	
	private String nombre;
	
	private String apellido;
	
	private String telefono;
	
	private String estado;
	
	private Date fechaCreacion;
	
	@ManyToMany
	@JoinTable(name="BeneficiosVenta_Cliente", 
			joinColumns= {@JoinColumn(name="dni")},
			inverseJoinColumns = { @JoinColumn(name = "idBeneficio")})
	private Set<BeneficioVenta> beneficios;
	
	public Cliente()
	{
		beneficios = new HashSet<BeneficioVenta>();		
	}

	public Cliente(String dni, String cuil, String nombre, String apellido,
			String telefono, String estado, Date fechaCreacion)
	{
		this.dni = dni;
		this.cuil = cuil;
		this.nombre = nombre;
		this.apellido = apellido;
		this.telefono = telefono;
		this.estado = estado;
		this.fechaCreacion = fechaCreacion;
		this.beneficios = new HashSet<BeneficioVenta>();	
	}
	
	public String getDni() {
		return dni;
	}

	public void setDni(String dni) {
		this.dni = dni;
	}

	public String getCuil() {
		return cuil;
	}

	public void setCuil(String cuil) {
		this.cuil = cuil;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public Date getFechaCreacion() {
		return fechaCreacion;
	}

	public void setFechaCreacion(Date fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}

	public Set<BeneficioVenta> getBeneficios() {
		return beneficios;
	}

	public void setBeneficios(Set<BeneficioVenta> beneficios) {
		this.beneficios = beneficios;
	}
	
	public void addBeneficio(BeneficioVenta beneficio) {
		this.beneficios.add(beneficio);
	}
	
	public void removeBeneficio(BeneficioVenta beneficio) {
		this.beneficios.remove(beneficio);
	}
	
	public ClienteDTO getView()
	{
		ClienteDTO dto = new ClienteDTO(this.dni,this.cuil,this.nombre,this.apellido, this.telefono,this.estado,this.fechaCreacion);
		
		for(BeneficioVenta bf : this.beneficios)
		{
			dto.addBeneficio(bf.getView());
		}
		
		return dto;
	}
}
